<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //   0级
    let num = 10

    //1级
    function fn1(){
        //let num = 65
        console.log(num);//10

        //2级
        function fn2(){
            let num = 33
            console.log(num);//33
        }
        fn2()
    }
    fn1()
    console.log(num)//10

//    [作用域链]
//    默认情况下,代码处于全局作用域(0级链),当声明一个函数之后就会开辟一个局部作用域(1级).
//    而函数里面又可以声明一个变量,有会形成新的作用域(2级),以此类推形成的结构称之为作用域链.

//    [变量访问规则: 就近原则]
//    当你在一个作用域访问变量之后,首先会看当前作用域有没有声明.
//    有则访问.没有则继续往上级查找.
//    直到作用域最顶端0级,如果还没有找到,则程序报错.
</script>
</body>
</html>